package com.happy.mycar;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

import java.util.concurrent.atomic.AtomicBoolean;

public class AccelerometerSensor implements SensorEventListener {
    //获取加速计器传感器
    private SensorManager sensorManager;
    private Sensor accelerometerSensor;

    //原子变量，用于判断是否有运动
    private AtomicBoolean isMoving = new AtomicBoolean(true);

    public boolean IsMoving() {
        return isMoving.get();
    }

    //记录有运动开始时间
    long startTime = System.currentTimeMillis();

    public AccelerometerSensor(Context ctx) {
        this.sensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);
        accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if (accelerometerSensor != null) {
            System.out.println("加速计传感器可用");
            // 注册传感器监听器
            sensorManager.registerListener(this, accelerometerSensor, 5000000);
        }
    }

    @Override
    protected void finalize() throws Throwable {
        if (accelerometerSensor != null)
            sensorManager.unregisterListener(this, accelerometerSensor); // 注销传感器监听器
        // 清理资源的逻辑，如关闭文件、断开网络连接等
        super.finalize(); // 调用父类的finalize方法
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        //判断是否有运动
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float x = event.values[0];
            float y = event.values[1];
            float z = event.values[2];

            // 计算加速度的大小
            double acceleration = Math.sqrt(x * x + y * y + z * z);
            // 判断是否有运动
            if (acceleration > 10) {
                //如果有运动，重置开始时间
                startTime = System.currentTimeMillis();
                System.out.println("有运动，重置开始时间...");
                isMoving.set(true);
            } else {
                if (isMoving.get() && System.currentTimeMillis() - startTime > 50000) {
                    //如果没有运动超过50秒，设置为没有运动
                    isMoving.set(false);
                    System.out.println("没有运动超过5秒");
                }
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}
